//package com.js.mvpdemo.base;
//
//import android.content.Context;
//import android.content.Intent;
//import android.content.pm.PackageInfo;
//import android.content.pm.PackageManager;
//import android.graphics.drawable.BitmapDrawable;
//import android.net.Uri;
//import android.os.Bundle;
//import android.util.Log;
//import android.view.Gravity;
//import android.view.LayoutInflater;
//import android.view.View;
//import android.view.ViewGroup;
//import android.widget.PopupWindow;
//import android.widget.TextView;
//
//import androidx.annotation.Nullable;
//import androidx.core.content.ContextCompat;
//
//import com.js.lib_common.base.BaseFragment;
//import com.js.lib_common.base.BasePresenter;
//import com.js.lib_common.event.StartBrotherEvent;
//import com.js.lib_common.mvp.model.response.MissionResponse;
//import com.js.mvpdemo.BaseApplication;
//import com.js.mvpdemo.R;
//import com.shuhart.stepview.StepView;
//
//import org.greenrobot.eventbus.EventBus;
//
//import java.util.ArrayList;
//import java.util.List;
//
//import io.reactivex.annotations.NonNull;
//
//
//public abstract class BaseMapFragment<P extends BasePresenter> extends BaseFragment {
//    protected P mvpPresenter;
//
//
//    @Nullable
//    @Override
//    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
//        mvpPresenter = createPresenter();
//        return super.onCreateView(inflater, container, savedInstanceState);
//
//    }
//
//    protected abstract P createPresenter();
//
//
//
//
//    public void setCenter()
//
//    public void initMapView(MapView bmapView) {
//        this.bmapView = bmapView;
//        //通过设置enable为true或false 选择是否显示缩放按钮
//        //        bmapView.showZoomControls(false);
//        //        //        mOptions = new ArrayList<>();
//        mBaiduMap = bmapView.getMap();
//        mBaiduMap.setMyLocationEnabled(true);
//        //        //定义地图状态
//        LatLng center = new LatLng(23.146404, 113.141171);
//
//        MapStatus mMapStatus = new MapStatus.Builder()
//                .target(center)
//                .zoom(13)
//                .build();
//        //        //定义MapStatusUpdate对象，以便描述地图状态将要发生的变化
//        MapStatusUpdate mMapStatusUpdate = MapStatusUpdateFactory.newMapStatus(mMapStatus);
//        //        //改变地图状态
//        mBaiduMap.setMapStatus(mMapStatusUpdate);
//        //
//        //
//        mClusterManager = new ClusterManager<>(_mActivity, mBaiduMap);
//        // 设置地图监听，当地图状态发生改变时，进行点聚合运算
//        mBaiduMap.setOnMapStatusChangeListener(mClusterManager);
//        // 设置maker点击时的响应
//        mBaiduMap.setOnMarkerClickListener(mClusterManager);
//        mClusterManager.setOnClusterItemClickListener(new ClusterManager.OnClusterItemClickListener<MapItem>() {
//            @Override
//            public boolean onClusterItemClick(MapItem item) {
//                MissionResponse mResponse = item.getEntity();
//                showPopwindow(mResponse);
//                return false;
//            }
//        });
//
//        initLocationOption();
//    }
//
//
//    /**
//     * 锚点
//     *
//     * @param data 数据
//     */
//    public void setMarkerList(List<MissionResponse> data) {
//        //        dataList=data;
//        mClusterManager.clearItems();
//        mClusterManager.cluster();
//        List<MapItem> items = new ArrayList<>();
//        for (MissionResponse response : data) {
//            float lat = Float.parseFloat(response.getRtuX());
//            float lng = Float.parseFloat(response.getRtuY());
//            if (lat != 0 && lng != 0) {
//                items.add(new MapItem(new LatLng(lat, lng), response));
//            }
//
//
//        }
//
//        mClusterManager.addItems(items);
//        mClusterManager.cluster();
//        Log.e("xxxxxxx", "setMarkerList");
//    }
//
//
//    /**
//     * 弹出marker详情
//     *
//     * @param entity
//     */
//    private void showPopwindow(MissionResponse entity) {
//        PopupWindow popupWindow;
//        //加载弹出框的布局
//        View contentView = LayoutInflater.from(_mActivity).inflate(R.layout.pop, null);
//        contentView.findViewById(R.id.btn_guide).setOnClickListener(new View.OnClickListener() {
//            @Override
//            public void onClick(View view) {
//                if(isAvilible(_mActivity,"com.baidu.BaiduMap")) {//传入指定应用包名
//                    Intent i1 = new Intent();
//                    StringBuilder stringBuilder = new StringBuilder();
//                    stringBuilder.append("baidumap://map/marker?location=")
//                            .append(entity.getRtuX())
//                            .append(",")
//                            .append(entity.getRtuY())
//                            .append("&title=")
//                            .append(entity.getRtuName())
//                            .append("&traffic=on&src=andr.baidu.openAPIdemo");
//                    //                i1.setData(Uri.parse("baidumap://map/marker?location=40.057406655722,116.2964407172&title=Marker&content=makeamarker&traffic=on&src=andr.baidu.openAPIdemo"));
//                    i1.setData(Uri.parse(stringBuilder.toString()));
//                    startActivity(i1);
//                }else {
//                    toastShow("安装百度地图方可导航");
//
//                }
//
//
//
//
//            }
//        });
//
//        TextView rtuName = contentView.findViewById(R.id.tv_rtuname);
//        rtuName.setText(entity.getRtuName());
//
//        TextView taskName = contentView.findViewById(R.id.tv_taskName);
//        taskName.setText(entity.getTaskName());
//        TextView address = contentView.findViewById(R.id.tv_address);
//        address.setText(entity.getRtuName());
//
//        TextView time = contentView.findViewById(R.id.tv_time);
//        time.setText(entity.getHourTotal());
//
//
//        StepView mStepsView = contentView.findViewById(R.id.step_view);
//        mStepsView.getState()
//                .selectedTextColor(ContextCompat.getColor(BaseApplication.getInstance(), R.color.colorAccent))
//                .animationType(StepView.ANIMATION_CIRCLE)
//                .selectedCircleColor(ContextCompat.getColor(BaseApplication.getInstance(), R.color.colorAccent))
//                .selectedStepNumberColor(ContextCompat.getColor(BaseApplication.getInstance(), R.color.colorPrimary))
//                .stepsNumber(entity.getTotalStep())
//                .animationDuration(BaseApplication.getInstance().getResources().getInteger(android.R.integer.config_shortAnimTime))
//                .commit();
//        mStepsView.done(true);
//        mStepsView.go(entity.getCurrentStep()-1, true);
//
//
//        popupWindow = new PopupWindow(contentView,
//                ViewGroup.LayoutParams.MATCH_PARENT,
//                ViewGroup.LayoutParams.WRAP_CONTENT);
//        popupWindow.setFocusable(true);// 取得焦点
//        //注意  要是点击外部空白处弹框消息  那么必须给弹框设置一个背景色  不然是不起作用的
//        popupWindow.setBackgroundDrawable(new BitmapDrawable());
//        //点击外部消失
//        popupWindow.setOutsideTouchable(true);
//        //设置可以点击
//        popupWindow.setTouchable(true);
//        //进入退出的动画，指定刚才定义的style
//        popupWindow.setAnimationStyle(R.style.mypopwindow_anim_style);
//        popupWindow.showAtLocation(contentView, Gravity.BOTTOM, 0, 0);
//        contentView.findViewById(R.id.btn_close).setOnClickListener(new View.OnClickListener() {
//            @Override
//            public void onClick(View view) {
//                popupWindow.dismiss();
//
//            }
//        });
//
//        contentView.setOnClickListener(new View.OnClickListener() {
//            @Override
//            public void onClick(View view) {
//                popupWindow.dismiss();
//                EventBus.getDefault().post(new StartBrotherEvent(MissionDetailFragment.newInstance(entity)));
//            }
//        });
//    }
//
//
//    @Override
//    public void onDestroyView() {
//        if (mvpPresenter != null) {
//            mvpPresenter.detachView();
//        }
//        locationClient.stop();
//        // 关闭定位图层
//        if (mBaiduMap != null)
//            mBaiduMap.setMyLocationEnabled(false);
//        bmapView.onDestroy();
//        bmapView = null;
//        super.onDestroyView();
//    }
//
//
//    @Override
//    public void onResume() {
//        super.onResume();
//        bmapView.onResume();
//    }
//
//    @Override
//    public void onPause() {
//        super.onPause();
//        bmapView.onPause();
//    }
//
//
//    public void showLoading() {
//        showLoadingDialog();
//    }
//
//    public void hideLoading() {
//        dismissLoadingDialog();
//    }
//
//
//    /**
//     * 初始化定位参数配置
//     */
//
//    private void initLocationOption() {
//        //定位服务的客户端。宿主程序在客户端声明此类，并调用，目前只支持在主线程中启动
//        locationClient = new LocationClient(BaseApplication.getInstance());
//        //声明LocationClient类实例并配置定位参数
//        LocationClientOption locationOption = new LocationClientOption();
//        MyLocationListener myLocationListener = new MyLocationListener();
//        //注册监听函数
//        locationClient.registerLocationListener(myLocationListener);
//        //可选，默认高精度，设置定位模式，高精度，低功耗，仅设备
//        locationOption.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy);
//        //可选，默认gcj02，设置返回的定位结果坐标系，如果配合百度地图使用，建议设置为bd09ll;
//        locationOption.setCoorType("gcj02");
//        //可选，默认0，即仅定位一次，设置发起连续定位请求的间隔需要大于等于1000ms才是有效的
//        locationOption.setScanSpan(1000 * 60 * 5);
//        //可选，设置是否需要地址信息，默认不需要
//        locationOption.setIsNeedAddress(true);
//        //可选，设置是否需要地址描述
//        locationOption.setIsNeedLocationDescribe(true);
//        //可选，设置是否需要设备方向结果
//        locationOption.setNeedDeviceDirect(false);
//        //可选，默认false，设置是否当gps有效时按照1S1次频率输出GPS结果
//        locationOption.setLocationNotify(true);
//        //可选，默认true，定位SDK内部是一个SERVICE，并放到了独立进程，设置是否在stop的时候杀死这个进程，默认不杀死
//        locationOption.setIgnoreKillProcess(true);
//        //可选，默认false，设置是否需要位置语义化结果，可以在BDLocation.getLocationDescribe里得到，结果类似于“在北京天安门附近”
//        locationOption.setIsNeedLocationDescribe(true);
//        //可选，默认false，设置是否需要POI结果，可以在BDLocation.getPoiList里得到
//        locationOption.setIsNeedLocationPoiList(true);
//        //可选，默认false，设置是否收集CRASH信息，默认收集
//        locationOption.SetIgnoreCacheException(false);
//        //可选，默认false，设置是否开启Gps定位
//        locationOption.setOpenGps(true);
//        //可选，默认false，设置定位时是否需要海拔信息，默认不需要，除基础定位版本都可用
//        locationOption.setIsNeedAltitude(false);
//        //设置打开自动回调位置模式，该开关打开后，期间只要定位SDK检测到位置变化就会主动回调给开发者，该模式下开发者无需再关心定位间隔是多少，定位SDK本身发现位置变化就会及时回调给开发者
//        locationOption.setOpenAutoNotifyMode();
//        //设置打开自动回调位置模式，该开关打开后，期间只要定位SDK检测到位置变化就会主动回调给开发者
//        locationOption.setOpenAutoNotifyMode(3000, 1, LocationClientOption.LOC_SENSITIVITY_HIGHT);
//        //需将配置好的LocationClientOption对象，通过setLocOption方法传递给LocationClient对象使用
//        locationClient.setLocOption(locationOption);
//        //开始定位
//        locationClient.start();
//
//        //
//    }
//
//
//    public class MyLocationListener extends BDAbstractLocationListener {
//        @Override
//        public void onReceiveLocation(BDLocation location) {
//
//
//            //获取纬度信息
//            double latitude = location.getLatitude();
//            //获取经度信息
//            double longitude = location.getLongitude();
//
//            int errorCode = location.getLocType();
//            if (errorCode == 161 || errorCode == 61) {
//                MyLocationData locData = new MyLocationData.Builder()
//                        .accuracy(location.getRadius())
//                        // 此处设置开发者获取到的方向信息，顺时针0-360
//                        .direction(location.getDirection()).latitude(location.getLatitude())
//                        .longitude(location.getLongitude()).build();
//                mBaiduMap.setMyLocationData(locData);
//
//                LatLng ll = new LatLng(latitude, longitude);
//                //                MapStatus.Builder builder = new MapStatus.Builder();
//                //                builder.target(ll).zoom(18.0f);
//                //                mBaiduMap.animateMapStatus(MapStatusUpdateFactory.newMapStatus(builder.build()));
//
//
//                BaseApplication.setmLatLng(ll);
//            }
//
//
//        }
//
//
//    }
//
//    private boolean isAvilible(Context context, String packageName){
//        //获取packagemanager
//        final PackageManager packageManager = context.getPackageManager();
//        //获取所有已安装程序的包信息
//        List<PackageInfo> packageInfos = packageManager.getInstalledPackages(0);
//        //用于存储所有已安装程序的包名
//        List<String> packageNames = new ArrayList<String>();
//        //从pinfo中将包名字逐一取出，压入pName list中
//        if(packageInfos != null){
//            for(int i = 0; i < packageInfos.size(); i++){
//                String packName = packageInfos.get(i).packageName;
//                packageNames.add(packName);
//            }
//        }
//        //判断packageNames中是否有目标程序的包名，有TRUE，没有FALSE
//        return packageNames.contains(packageName);
//    }
//}
